\chapter{Gesamtkonzept}\label{chap:gesamtkonzept}

\section{Analyse}\label{sec:analyse}
Die Analysephase nahm einen wesentlichen Teil der Projektzeit in Anspruch. Als erstes mussten die genauen Anforderungen an das Projekt eruiert werden. Viele Ansprüche waren zu Beginn unklar und konnten erst langsam, nach mehreren Sitzungen zu konkreten Anforderungen ausformuliert werden, woraus dann das Pflichtenheft (Siehe Anhang \ref{chap:pflichtenheft}) entstand. \\
Um die Problemstellung besser zu verstehen war auch intensives Einlesen in die gegebene Materie (Software sowie Hardware) notwendig. Wir haben uns dabei an der Master’s Thesis\cite{thesis-fabianbrugger} und dem Blackfin Documentation Wiki\cite{blackfin-wiki} orientiert. Dabei ging es vor allem darum, die Möglichkeiten und Funktionsweisen des Systems kennenzulernen.

\section{Grundsatzentscheide}\label{sec:grundsatzentscheide}
Es musste eine, auch für zukünftige Entwicklungen, geeignete Entwicklungsumgebung gefunden werden. 
Durch die auf dem Zielsystem gegebenen Rahmenbedingungen war die Programmiersprache von Beginn an festgelegt. Das Projekt wurde in C realisiert.
Um die Diskrepanzen zwischen Host- und Zielsystem möglichst klein zu halten haben wir uns entschieden, als Hostsystem ebenfalls eine Linux-Umgebung zu wählen. Trotzdem haben wir darauf geachtet, dass eine spätere Portierung auf Windows als Hostsystem so einfach wie möglich zu realisieren ist. 

\section{Technologien}\label{sec:technologien}
Zur Realisation der Projektarbeit wurden verschiedene Technologien eingesetzt, die wichtigsten werden hier kurz beschrieben.

\begin{description}
\item[uClinux] \cite{uclinux} war ursprünglicherweise ein Derivat des Linux 2.0 Kernels, gedacht für Mikrocontroller ohne eine Memory Management Unit (MMU). Mittlerweile werden aber eine breite Anzahl von Prozessoren, unter anderem auch der Blackfin DSP, unterstützt. Die aktuelle uClinux Distribution enthält neben dem Kernel 2.6 auch eine grosse Anzahl von Benutzerapplikationen, Bibliotheken und eine Toolchain. Auf dem LCV Board läuft eine auf den Blackfin Prozessor portierte Version von uClinux.
In dieser Projektarbeit wurden von Fabian Brugger angepasste Live Sources (Stand Juli 2007) verwendet.
\item[C] Die folgende Beschreibung wurde der deutschen Wikipedia Seite\cite{c-wikipedia} entnommen: \begin{quote}
C ist eine imperative Programmiersprache, welche Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories für das Betriebssystem Unix entwickelte. Seitdem ist es auf vielen Computer-Systemen verbreitet. Die Anwendungsbereiche von C sind universell. Es wird zur System- und Anwendungsprogrammierung eingesetzt. Die grundlegenden Programme aller Unix-Systeme und die Systemkerne vieler Betriebssysteme sind in C programmiert.
\end{quote}
\item[Eclipse] Eclipse ist ein Open-Source-Framework zur Entwicklung von Software. Mit dem CDT (C/C++ Development Tooling) Plugin können auch C Projekte unter Eclipse realisiert werden. Wir haben uns aus mehreren Gründen für Eclipse entschieden:
\begin{itemize}
\item Da Eclipse selbst auch OpenSource Software ist, wurde eine Anforderung der Projektarbeit erfüllt.
\item Eclipse basiert auf Java und kann daher Betriebssystem unabhängig eingesetzt werden.
\item Eclipse wird bereits von vielen Programmierern verwendet, die Installation eines zusätzliche IDEs ist somit nicht notwendig.
\item Das CDT Plugin unterstützt Remote Debugging über den gdb Debugger.
\item Es existieren Plugins zur Versionsverwaltung, namentlich Subclipse (Subversion Plugin).
\item Auf dem Blackfin Documentation Wiki\cite{blackfin-wiki} sind Anleitungen zur Verwendung von Eclipse verfügbar, wenn auch nicht auf dem aktuellsten Stand.
\end{itemize}
\end{description}

\section{Einschränkungen}
Das LCV Board bringt einige Einschränkungen mit sich, die bei der Realisation beachtet werden müssen.
\begin{description}
\item[uClinux] Es fehlen bestimmte Systemfunktionen wie \textit{fork()}. Stattdessen muss \textit{vfork()} verwendet werden. Ausserdem müssen Speicheroperationen sehr sauber ausprogrammiert werden, da uClinux über keine MMU verfügt. Für genauere Informationen empfehlen wir die Konsultation des Blackfin Documentation Wiki\cite{blackfin-wiki}.
\item[uClibc] Die uClibc auf dem Zielsystem bietet nur einen beschränkten Umfang der C-Standardbibliotheken.
\item[Persistenter Speicher] Das LCV Board besitzt zwei Flash Speicherchips mit je 4MB Kapazität. Der eine wird vom Linux Kernel benutzt, der andere war zum Zeitpunkt der Projektarbeit nicht verfügbar. Daher gab es keine Möglichkeit, Daten persistent auf dem System zu speichern. 
\end{description}

\section{Simulation auf dem Hostsystem}\label{sec:simulation_auf_host}
Eine der Grundanforderungen an die Projektarbeit war die Simulation der Funktionen des Framworks auf dem Hostsystem. 
Wir haben verschiedene Möglichkeiten skizziert und uns schliesslich für die flexibelste entschieden. 
Die Funktionen für Host- und Zielsystem sollen unterschiedlich implementiert werden, weisen aber eine identische Funktionsdeklaration auf. Der Funktionsaufruf ist daher für beide Systeme identisch. Zur Kompilierzeit wird dem Compiler die systemspezifische Implementation mitgeteilt.

%was steckt hinter der arbeit